package com.heking.zplayer.qlyopen;

import android.view.ViewGroup;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import androidx.annotation.IntDef;
import androidx.annotation.Nullable;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.LOCAL_VARIABLE;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;

/**
 * @Author: zhoug
 * @Date: 2024-11-05
 * @Description:
 */
public interface IQlyPlayer {

    /**
     * 播放状态
     */
    @Documented
    @Retention(RetentionPolicy.SOURCE)
    @Target({FIELD, METHOD, PARAMETER, LOCAL_VARIABLE, TYPE_USE})
    @IntDef({STATE_IDLE, STATE_START, STATE_PREPARED, STATE_PLAYING, STATE_PAUSE, STATE_ENDED})
    @interface State {
    }

    /**
     * 播放器处于初始状态,
     * 调用{@link #stopPlay()},{@link #release()}后的状态
     */
    int STATE_IDLE = 0;
    /**
     * 开始播放
     */
    int STATE_START = 1;
    /**
     * 资源准备好了
     */
    int STATE_PREPARED = 2;
    /**
     * 正在播放
     */
    int STATE_PLAYING = 3;
    /**
     * 暂停播放
     */
    int STATE_PAUSE = 4;

    /**
     * 播放完成了
     */
    int STATE_ENDED = 5;


    /**
     * 设置PlayView容器
     *
     * @param viewGroup
     */
    void setPlayViewGroup(@Nullable ViewGroup viewGroup);

    /**
     * 设置播放url
     *
     * @param url
     */
    void setPlayUrl(@Nullable String url);

    /**
     * 设置静音
     *
     * @param mute true:静音,false:非静音
     */
    void setMute(boolean mute);

    /**
     * 是否是静音
     *
     * @return
     */
    boolean isMute();


    /**
     * 开始播放,每次都是重新加载资源播放,可以播放新的url
     */
    void startPlay();

    /**
     * 停止播放,会释放加载的媒体和资源
     */
    void stopPlay();

    /**
     * 如果正在播放则暂停播放,否则调用{@link #stopPlay()}停止播放
     */
    void pausePlay();

    /**
     * 如果暂停了或者资源已经准备好了则播放,否则{@link #startPlay()}重新开始播放
     */
    void resumePlay();

    /**
     * 释放资源,注意请把所有setXXX的数据设置为空
     */
    void release();

    /**
     * 是否正在播放
     *
     * @return
     */
    boolean isPlaying();

    /**
     * 开启对讲
     */
    void startVoiceTalk();

    /**
     * 停止对讲
     */
    void stopVoiceTalk();

    /**
     * 是否正在对讲
     *
     * @return
     */
    boolean isTalking();

    /**
     * 获取播放状态
     *
     * @return
     */
    @State int getPlaySate();

    /**
     * 播放监听
     *
     * @param playListener
     */
    void setPlayListener(@Nullable PlayListener playListener);

    void setOnTalkListener(@Nullable OnTalkListener onTalkListener);

    void setOnCameraAbilityChange(@Nullable Callback<QlyCameraAbility> callback);

    void setOnQlyCameraSettingChange(@Nullable Callback<QlyCameraSetting> callback);

    /**
     * 设置截屏回掉
     *
     * @param capturePictureListener
     */
    void setCapturePictureListener(@Nullable CapturePictureListener capturePictureListener);

}
